An instruction set architecture (ISA) is fundamental to computer processor design and development. The ISA includes the set of instructions for the processor, the instruction format, and processor characteristics such as the type of operands that can be used, the storage mechanisms used for instruction execution and how the storage mechanisms are accessed. The instruction set is used by programmers to communicate programs to the processor. Moreover, the instruction set architecture is used by multiple software “tools” for processor development and programming, including compilers, linkers and debuggers.
A compiler transforms “source code” written in a higher-level programming language to “object code” understandable by a processor. A linker combines one or more object code files created by a compiler into a single executable file, and may also arrange for execution of code in the proper address space of the processor. A debugger is a program used in testing other programs written to run on the processor. These tools along with other development tools for a processor may be referred to as a “tool chain” or “toolchain.” Any changes made to a processor's instruction set or other aspects of the instruction set architecture must be reflected throughout the tool chain, in each tool using the ISA.
An ISA is typically tested, revised and verified extensively until deemed satisfactory, at which point a specification, simulator, and development tool chain may be created based on the ISA. Processor design can then proceed based on the ISA as well, including microarchitecture design and verification, implementation of the microarchitecture in a hardware description language (HDL), and circuit synthesis based on the HDL implementation.
The high degree of integration between an ISA and a processor compatible with the ISA, along with the immense undertaking that development of an ISA and related tools represents, can make it difficult to implement specialized processor designs. Creating a new instruction set, or even revising an existing one, can be prohibitively expensive and time-consuming given the array of associated verification and development tools that would also need to be created or modified.